package com.wxpay.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.springframework.util.DigestUtils;

/**
 * 支付签名工具类
 * @Author worlt
 * @Date 2025/4/22 上午10:25
 */
public class PaySignUtil {

    /**
     * 创建签名
     * @param params 参数
     * @param key 密钥
     * @return 签名
     */
    public static String createSign(Map<String, Object> params, String key) {
        // 排序
        List<String> keys = new ArrayList<>(params.keySet());
        Collections.sort(keys);
        
        // 拼接
        StringBuilder preStr = new StringBuilder();
        for (String k : keys) {
            Object v = params.get(k);
            if (v != null && !"".equals(v) && !"sign".equals(k)) {
                preStr.append(k).append("=").append(v).append("&");
            }
        }
        preStr.append("key=").append(key);
        
        // MD5加密并转大写
        return DigestUtils.md5DigestAsHex(preStr.toString().getBytes()).toUpperCase();
    }
    
    /**
     * 验证签名
     * @param params 参数
     * @param key 密钥
     * @return 验证结果
     */
    public static boolean checkSign(Map<String, Object> params, String key) {
        String sign = (String) params.get("sign");
        if (sign == null) {
        return false;
    }

        // 重新计算签名
        String calculatedSign = createSign(params, key);
        
        // 比较签名
        return sign.equals(calculatedSign);
    }
}
